#include "game_ui.h"
#include "game_play.h"
//画一个新的图形出来
void init_new_shape(){
        int type =next_type;
        int change_type = next_change_type;
        int color = next_color;
        int x = init_x;
        int y = init_y;
        
        //换新图四个值都要变
        dynamic_type = type;
        dynamic_change_type =change_type;
        dynamic_color = color;
        dynamic_x = x;
        dynamic_y = y;
        print_mode_shape(type,change_type,x,y,color);
}
/**
 * 输出一个图形
 */
void print_mode_shape(int type,int change_type,int x,int y,int color)
{
    //不能直接用xy，改完值就不能充值下面的了
    int xx =x;
    int yy=y;
    int i;
    for (i= 0; i < 16; i++)
    {
        //每画完四个要换行，x重置到最开始。y+1
        if (i!=0 && i%4==0)
        {
            yy = yy+1;
            xx =x;
        }
        if (shape[type][change_type][i]==1)
        {
            printf("\033[%d;%dH",yy,xx);
            printf("\033[%dm[]",color);
            printf("\033[0m");
        }
        //每画一个，xx就要移动2个字符
        xx+=2;
    }
    fflush(NULL);
}

/**
 * 显示下一个图形
 */
void print_next_shape()
{
    //清除原来
    if (next_type!=-1)
    {
       clear_mode_shape(next_type,next_change_type,next_x,next_y);
    }
    
    //打新的
    next_type = random() %7;
    next_change_type = random() %4;
    int index  = random()%5;
    next_color =glabal_colors[index];
    print_mode_shape(next_type,next_change_type,next_x,next_y,next_color);

}


//消行，输出分数
 void print_score_level(){
    printf("\33[%d;%dH\033[37m分数为:%d\033[0m",score_y,score_x,score);
    printf("\33[%d;%dH\033[37m等级为:%d\033[0m",level_y,level_x,level);
 }

//消行，画界面
 void  print_matrix(){
        int i,j;
        for (i = 0; i < 24; i++)
        {
           for ( j = 0; j < 28; j=j+2)
           {
                int x = j +12;
                int y = i +6;
                int color = matrix[i][j];
                if (color==0)
                {
                    //清除
                    printf("\033[%d;%dH",y,x);
                    printf("\033[%dm  ",color);
                    printf("\033[0m");
                }else{
                    //重绘
                    printf("\033[%d;%dH",y,x);
                    printf("\033[%dm[]",color);
                    printf("\033[0m");
                }
           }  
        }
        fflush(NULL);
 }


/**
 *  清除图形
 */
void clear_mode_shape(int type,int change_type,int x,int y)
{
    //不能直接用xy，改完值就不能充值下面的了
    int xx =x;
    int yy=y;
    for (int i = 0; i < 16; i++)
    {
        //每画完四个要换行，x重置到最开始。y+1
        if (i!=0 && i%4==0)
        {
            yy = yy+1;
            xx =x;
        }
        if (shape[type][change_type][i]==1)
        {
            printf("\033[%d;%dH",yy,xx);
            printf("  ");
            printf("\033[0m");
        }
        //每画一个，xx就要移动2个字符
        xx+=2;
    }
    fflush(NULL);
}

void init_game_ui(){
    //打出主界面
    print_start_ui();
    //点回车才k开始
    //getch();
    //显示初始图形和下一个图形
     srandom(time(NULL));
    int  type   = random() %7;
    int  change_type = random() %4;
    int index  = random()%5;
    int  color =glabal_colors[index];  //5  

    //做下左右移动的时候，不能直接改init_x,init_y，这两个产生新图的时候要用。
    dynamic_x = init_x;
    dynamic_y = init_y;
    //做变换和新图产生的时候也有动态值。
    dynamic_type = type;
    dynamic_change_type = change_type;
    dynamic_color = color;

    print_mode_shape(type,change_type,init_x,init_y,color);
    print_next_shape();

    //隐藏光标
     printf("\33[?25l");
     
}

void print_start_ui(){
    printf("\33[2J");
    
    //1 画上下两横
    for (int i = 0;i < 47;i++)
    {
        printf("\33[%d;%dH\033[43m \033[0m",5,10+i);
        printf("\33[%d;%dH\033[43m \033[0m",30,10+i);
    }
    
    //2 画三竖
    for (int i = 0; i < 26; i++)
    {
        printf("\33[%d;%dH\033[43m  \033[0m",5+i,10);
        printf("\33[%d;%dH\033[43m  \033[0m",5+i,40);
        printf("\33[%d;%dH\033[43m  \033[0m",5+i,56);
    }
    //3 画中间短横
    for (int i = 0; i < 17; i++)
    {
        printf("\33[%d;%dH\033[43m \033[0m",12,40+i);
    }
    //4 画分数和等级
      printf("\33[%d;%dH\033[37m分数为:0\033[0m",score_y,score_x);
      printf("\33[%d;%dH\033[37m等级为:1\033[0m",level_y,level_x);
    
    fflush(NULL);
}
